#include <stdio.h>
// 内存对齐规则：以最大的 数据类型 进行对齐
// 放在一排的小数据类型也要对齐

// 定义时尽量由小到大，小的放一起，节省内存空间

struct Test
{
    // char b;
    // int a;
    // double c;  //16字节

    // int b;
    // double c;
    // char a;   //24字节

    // char a[10];
    // int b;
    // int *c; // 24字节

    // char a[13]; //数组大小最好是8的倍数
    // int b;
    // int *c; // 32字节

    char a[16]; 
    int b;
    int *c; 
};

//结构体嵌套时，按照两个结构体中最大的数据类型进行对齐；
//不同结构体中的变量不能放在同一排
struct Test2
{
    struct Test t;
    int a;  //40字节
};

int main()
{
    struct Test t;
    printf("%ld\n", sizeof(t));
    // printf("%p %p %p\n", &t, &t.b, &t.a);
    // printf("%p %p %p %p\n", &t, &t.b, &t.a, &t.c); // b和a一排，占8个  c一排，占8个
    printf("%p %p %p %p\n", &t, &t.b, &t.c, &t.a); // 共24个

    return 0;
}
